package info.toegepaste.www;

import info.toegepaste.www.beans.Account;
import info.toegepaste.www.beans.Alumnus;
import info.toegepaste.www.beans.Bedrijf;
import info.toegepaste.www.beans.Event;
import info.toegepaste.www.beans.Functie;
import info.toegepaste.www.beans.Inschrijving;
import info.toegepaste.www.beans.Richting;
import info.toegepaste.www.beans.Werkstatus;
import info.toegepaste.www.dataaccess.DAAccount;
import info.toegepaste.www.dataaccess.DAAlumnus;
import info.toegepaste.www.dataaccess.DABedrijf;
import info.toegepaste.www.dataaccess.DAEvent;
import info.toegepaste.www.dataaccess.DAFunctie;
import info.toegepaste.www.dataaccess.DAInschrijving;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Date;
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 *
 * @author Logic
 */
@WebServlet(name = "RegistratieServlet", urlPatterns = {"/RegistratieServlet"}, initParams = {
    @WebInitParam(name = "url", value = "jdbc:mysql://localhost/lesson"),
    @WebInitParam(name = "login", value = "dba"),
    @WebInitParam(name = "password", value = "sql")})
public class RegistratieServlet extends HttpServlet {

    DAAccount daaccount = null;
    DAAlumnus daalumnus = null;
    DAFunctie dafunctie = null;
    DABedrijf dabedrijf = null;
    DAEvent daevent = null;
    DAInschrijving dainschrijving = null;

    /**
     * Processes requests for both HTTP
     * <code>GET</code> and
     * <code>POST</code> methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    public void destroy() {
        try {
            if (daaccount != null) {
                daaccount.close();
            }
            if (daalumnus != null) {
                daalumnus.close();
            }
            if (dafunctie != null) {
                dafunctie.close();
            }
            if (dabedrijf != null) {
                dabedrijf.close();
            }
            if (daevent != null) {
                daevent.close();
            }
            if (dainschrijving != null) {
                dainschrijving.close();
            }

        } catch (SQLException e) {
        }
    }

    @Override
    public void init() throws ServletException {
        try {
            String url = getInitParameter("url");
            String password = getInitParameter("password");
            String login = getInitParameter("login");


            if (daaccount == null) {
                daaccount = new DAAccount(url, login, password);
            }
            if (daalumnus == null) {
                daalumnus = new DAAlumnus(url, login, password);
            }
            if (dafunctie == null) {
                dafunctie = new DAFunctie(url, login, password);
            }
            if (dabedrijf == null) {
                dabedrijf = new DABedrijf(url, login, password);
            }
            if (daevent == null) {
                daevent = new DAEvent(url, login, password);
            }
            if (dainschrijving == null) {
                dainschrijving = new DAInschrijving(url, login, password);
            }


        } catch (Exception e) {
            throw new ServletException(e);
        }
    }

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        RequestDispatcher rd = null;
        HttpSession session = request.getSession();

        //NAAR REGISTRATIEPAGINA
        if (request.getParameter("registratieButton") != null) {
            ArrayList<Functie> functies = dafunctie.getAlleFuncties();
            request.setAttribute("functies", functies);

            ArrayList<Bedrijf> bedrijven = dabedrijf.getAlleBedrijven();
            request.setAttribute("bedrijven", bedrijven);
            rd = request.getRequestDispatcher("registratie.jsp");
        }
        if (request.getParameter("logoutButton") != null) {
            session.invalidate();
            rd = request.getRequestDispatcher("index.jsp");
        }
        if (request.getParameter("inschrijven1") != null) {
            Event event = daevent.getEvent(1);
            request.setAttribute("event", event);
            rd = request.getRequestDispatcher("inschrijven.jsp");
        }
        if (request.getParameter("inschrijven2") != null) {
            Event event = daevent.getEvent(2);
            request.setAttribute("event", event);
            rd = request.getRequestDispatcher("inschrijven.jsp");
        }
        if (request.getParameter("inschrijven3") != null) {
            Event event = daevent.getEvent(3);
            request.setAttribute("event", event);
            rd = request.getRequestDispatcher("inschrijven.jsp");
        }
        if (request.getParameter("inschrijven4") != null) {
            Event event = daevent.getEvent(4);
            request.setAttribute("event", event);
            rd = request.getRequestDispatcher("inschrijven.jsp");
        }
        if (request.getParameter("inschrijven") != null) {
            Inschrijving inschrijving = null;
            Event event = null;
            event = daevent.getEvent(Integer.parseInt(request.getParameter("eventID")));
            dainschrijving.insertInschrijving(Integer.parseInt(request.getParameter("eventID")), Integer.parseInt(request.getParameter("alumnusID")), request.getParameter("opmerkingen"), Boolean.parseBoolean(request.getParameter("aanwezig")));
            String bedankt = "Bedankt voor uw inschrijving, er zijn geen fouten opgetreden.";
            request.setAttribute("bedankt", bedankt);
            rd = request.getRequestDispatcher("bedankt.jsp");
        }

        //REGISTREREN
        if (request.getParameter("registreren") != null) {
            Alumnus nieuwealumnus = new Alumnus();
            nieuwealumnus.setVoornaam(request.getParameter("voornaam"));
            nieuwealumnus.setAchternaam(request.getParameter("achternaam"));
            nieuwealumnus.setEmailprive(request.getParameter("emailprive"));
            nieuwealumnus.setAfstudeerjaar(request.getParameter("afstudeerjaar"));

            //Datum "sinds" alumnus
            java.util.Date utilDate;
            try {
                utilDate = new SimpleDateFormat("dd/MM/yyyy").parse(request.getParameter("sinds"));
                java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());
                nieuwealumnus.setSinds(sqlDate);
            } catch (ParseException ex) {
                Logger.getLogger(RegistratieServlet.class.getName()).log(Level.SEVERE, null, ex);
            }
            //Functie
            nieuwealumnus.setFunctie(new Functie(Integer.parseInt(request.getParameter("functie"))));

            //Bedrijf
            nieuwealumnus.setBedrijf(new Bedrijf(Integer.parseInt(request.getParameter("bedrijf"))));

            //Richting
            nieuwealumnus.setRichting(new Richting(Integer.parseInt(request.getParameter("richting"))));

            //Werkstatus
            nieuwealumnus.setWerkstatus(new Werkstatus(Integer.parseInt(request.getParameter("werkstatus"))));

            nieuwealumnus.setVoornaam(request.getParameter("voornaam"));

            Account nieuwaccount = new Account();

            nieuwaccount.setLoginnaam(request.getParameter("loginnaam"));
            nieuwaccount.setPaswoord(request.getParameter("paswoord"));
            nieuwaccount.setType("a");
            try {
                nieuwaccount.setAlumnusID(daalumnus.create(nieuwealumnus));
                daaccount.create(nieuwaccount);
            } catch (SQLException ex) {
                Logger.getLogger(RegistratieServlet.class.getName()).log(Level.SEVERE, null, ex);
            }
            /*ArrayList<Event> events = daevent.getAlleEvents();
             request.setAttribute("events", events);*/
            String bedankt = "Bedankt om een account aan te maken, er zijn geen fouten opgetreden.";
            request.setAttribute("bedankt", bedankt);
            rd = request.getRequestDispatcher("bedankt.jsp");

        }
        if (request.getParameter("voegfunctietoe") != null) {
            if (request.getParameter("functietoevoegen") != null) {
                ArrayList<Functie> functies = dafunctie.getAlleFuncties();
                request.setAttribute("functies", functies);

                ArrayList<Bedrijf> bedrijven = dabedrijf.getAlleBedrijven();
                request.setAttribute("bedrijven", bedrijven);
                dafunctie.insertFunctie(request.getParameter("functietoevoegen"));
                rd = request.getRequestDispatcher("registratie.jsp");
            }
        }
        if (request.getParameter("bedrijfnaam") != null) {
            dabedrijf.insertBedrijf(request.getParameter("bedrijfnaam"), request.getParameter("postcode"), request.getParameter("gemeente"), request.getParameter("website"));
            ArrayList<Functie> functies = dafunctie.getAlleFuncties();
            request.setAttribute("functies", functies);

            ArrayList<Bedrijf> bedrijven = dabedrijf.getAlleBedrijven();
            request.setAttribute("bedrijven", bedrijven);
            rd = request.getRequestDispatcher("registratie.jsp");

        }
        if (request.getParameter("eventButton") != null) {
            ArrayList<Event> events = daevent.getAlleEvents();
            if (session.getAttribute("alumnus") != null) {
                Alumnus ingelogdeAlumnus = (Alumnus) session.getAttribute("alumnus");
                ArrayList<Integer> eventIDs = dainschrijving.getInschrijvingIDsAlumnus(ingelogdeAlumnus.getAlumnusID());
                request.setAttribute("IDs", eventIDs);
            }
            request.setAttribute("events", events);

            rd = request.getRequestDispatcher("events.jsp");

        }
        if (request.getParameter("ingeschreven1") != null) {
            ArrayList<Alumnus> alumni = dainschrijving.getAlleAlumniPerEvent(1);
            request.setAttribute("alumni", alumni);
            rd = request.getRequestDispatcher("alumniperinschrijving.jsp");
        }
        if (request.getParameter("ingeschreven2") != null) {
            ArrayList<Alumnus> alumni = dainschrijving.getAlleAlumniPerEvent(2);
            request.setAttribute("alumni", alumni);
            rd = request.getRequestDispatcher("alumniperinschrijving.jsp");
        }
        if (request.getParameter("ingeschreven3") != null) {
            ArrayList<Alumnus> alumni = dainschrijving.getAlleAlumniPerEvent(3);
            request.setAttribute("alumni", alumni);
            rd = request.getRequestDispatcher("alumniperinschrijving.jsp");
        }
        if (request.getParameter("ingeschreven4") != null) {
            ArrayList<Alumnus> alumni = dainschrijving.getAlleAlumniPerEvent(4);
            request.setAttribute("alumni", alumni);
            rd = request.getRequestDispatcher("alumniperinschrijving.jsp");
        }

        rd.forward(request, response);
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP
     * <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP
     * <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}
